
/**
 * Kali.java - Käyttöliittymäluokka.
 *
 * @author tuomo
 */
public class Kali {

    private final int viikonpaivia;

    /**
     * Viikonpäivät.
     */
    private String[] viikonpaivat = {"maanantai", "tiistai", "keskiviikko", "torstai", "perjantai", "lauantai", "sunnuntai"};

    /**
     * Luo uuden käliluokan ilmentymän.
     * @param viikonpaivia viikonpäivien määrä
     */
    public Kali(int viikonpaivia) {
        this.viikonpaivia = viikonpaivia;
    }

    /**
     * Tulostaa päänäkymän.
     * @param aikataulu viikon tapahtumat, jokainen päivä omana alkionaan
     * @param viikonpaiva viikonpäivä tänään kokonaislukuna
     */
    public void printMain(String[] aikataulu, int viikonpaiva) {
        clearScreen();
        printLogo();

        for (int i = 0; i < viikonpaivia; i++) {
            if (i + 1 == viikonpaiva) {
                System.out.println("_" + viikonpaivat[i] + "_");
            } else {
                System.out.println(viikonpaivat[i]);
            }

            if (aikataulu[i].isEmpty()) {
                System.out.println("-\n");
            } else {
                System.out.println(aikataulu[i]);
            }
        }

        System.out.println(".---------------------.\n"
                + "|      Valinnat       |\n"
                + "+---------------------+\n"
                + "| 1 Lisää tapahtuma   |\n"
                + "| 2 Poista tapahtuma  |\n"
                + "| 3 Vie lukujärjestys |\n"
                + "| Q Poistu            |\n"
                + "'---------------------'");
        System.out.println("Anna valinta");
    }

    /**
     * Tulostaa poistonäkymän.
     * @param aikataulu viikon tapahtumat, jokainen päivä omana alkionaan
     */
    public void printPoista(String[] aikataulu) {
        clearScreen();
        printLogo();

        for (int i = 0; i < viikonpaivia; i++) {
            System.out.println(viikonpaivat[i]);

            if (aikataulu[i].isEmpty()) {
                System.out.println("-\n");
            } else {
                System.out.println(aikataulu[i]);
            }
        }

        System.out.println("Anna poistettavan tapahtuman numero (0 palaa päävalikkoon)");
    }

    /**
     * Tulostaa tapahtuman poiston epäonnistumisen virheilmoituksen.
     * @param tapahtuma tapahtuman numero
     */
    public void printPoistaFail(int tapahtuma) {
        System.out.println("Tapahtumaa " + tapahtuma + " ei ole olemassa!");
    }

    /**
     * Tulostaa lisäysnäkymän.
     */
    public void printLisaa() {
        clearScreen();
        printLogo();

        System.out.println("Anna tapahtuman nimi");
    }

    /**
     * Tulostaa lisäysnäkymän tapahtuman päivän kyselyn.
     */
    public void printLisaaPaiva() {
        String tulostus = "Anna tapahtuman päivä numerolla: ";
        for (int i = 1; i < viikonpaivia; i++) {
            tulostus += i + " " + viikonpaivat[i-1] + ", ";
        }
        tulostus += viikonpaivia + " " + viikonpaivat[viikonpaivia - 1];
        System.out.println(tulostus);
    }

    /**
     * Tulostaa lisäysnäkymän tapahtuman alkuajan kyselyn.
     */
    public void printLisaaAlkuaika() {
        System.out.println("Anna tapahtuman alkuaika kahdella numerolla väliltä 00-23 (esim. 10) ");
    }

    /**
     * Tulostaa lisäysnäkymän tapahtuman loppuajan kyselyn.
     */
    public void printLisaaLoppuaika() {
        System.out.println("Anna tapahtuman loppuaika kahdella numerolla väliltä 01-24 (esim. 12)");
    }

    /**
     * Tulostaa lisäysnäkymän tapahtuman sijainnin kyselyn.
     */
    public void printLisaaSijainti() {
        System.out.println("Anna tapahtuman sijainti");
    }

    /**
     * Tulostaa vientinäkymän.
     */
    public void printVie() {
        clearScreen();
        printLogo();

        System.out.println("Anna kirjoitettavan tiedoston nimi");
    }

    /**
     * Tulostaa viennin epäonnistumisen virheilmoituksen.
     */
    public void printVieFail() {
        System.out.println("Tiedostoon tallentaminen ei onnistunut.");
    }

    /**
     * Tulostaa kokonaislukuinputin virheilmoituksen.
     */
    public void printAnnaInt() {
        System.out.println("Anna kokonaisluku!");
    }

    /**
     * Palauttaa tiedostoon kirjoitettavan aikataulun.
     * @param aikataulu tapahtumat
     * @return tiedostoon kirjoitettava aikataulu
     */
    public String getTiedosto(String[] aikataulu) {
        String palautettava = "";

        for (int i = 0; i < viikonpaivia; i++) {
            palautettava += viikonpaivat[i] + "\n";

            if (aikataulu[i].isEmpty()) {
                palautettava += "-\n\n";
            } else {
                palautettava += aikataulu[i] + "\n";
            }
        }

        return palautettava;
    }

    /**
     * "Tyhjentää" näytön.
     */
    private void clearScreen() {
        for (int i = 0; i < 100; i++) {
            System.out.println();
        }
    }

    /**
     * Tulostaa ohjelmiston logon.
     */
    private void printLogo() {
        System.out.println("    _|_|      _|_|          _|  \n"
                + "  _|    _|  _|    _|        _|  \n"
                + "  _|    _|  _|_|_|_|        _|  \n"
                + "  _|    _|  _|    _|  _|    _|  \n"
                + "    _|_|    _|    _|    _|_|    \n"
                + "\n"
                + "--------------------------------\n");
    }

}